package com.example.app.adapter;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.app.R;
import com.example.app.model.BluetoothDeviceModel;
import com.google.android.material.button.MaterialButton;
import java.util.ArrayList;
import java.util.List;

/**
 * 蓝牙设备列表适配器
 * 用于在RecyclerView中显示蓝牙设备列表
 */
public class DeviceAdapter extends RecyclerView.Adapter<DeviceAdapter.DeviceViewHolder> {
    // 设备列表
    private List<BluetoothDeviceModel> devices;
    // 设备点击监听器
    private final OnDeviceClickListener listener;

    /**
     * 设备点击监听器接口
     */
    public interface OnDeviceClickListener {
        /**
         * 当设备连接按钮被点击时调用
         * @param device 被点击的设备
         */
        void onConnectClick(BluetoothDeviceModel device);
    }

    /**
     * 构造函数
     * @param listener 设备点击监听器
     */
    public DeviceAdapter(OnDeviceClickListener listener) {
        this.devices = new ArrayList<>();
        this.listener = listener;
    }

    @NonNull
    @Override
    public DeviceViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // 加载设备列表项布局
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_device, parent, false);
        return new DeviceViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull DeviceViewHolder holder, int position) {
        // 绑定设备数据到视图
        BluetoothDeviceModel device = devices.get(position);
        holder.bind(device);
    }

    @Override
    public int getItemCount() {
        return devices.size();
    }

    /**
     * 更新设备列表
     * @param newDevices 新的设备列表
     */
    public void updateDevices(List<BluetoothDeviceModel> newDevices) {
        this.devices = newDevices;
        notifyDataSetChanged();
    }

    /**
     * 添加新设备到列表
     * @param device 要添加的设备
     */
    public void addDevice(BluetoothDeviceModel device) {
        // 检查设备是否已存在
        for (int i = 0; i < devices.size(); i++) {
            if (devices.get(i).getAddress().equals(device.getAddress())) {
                // 更新已存在设备的信息
                devices.set(i, device);
                notifyItemChanged(i);
                return;
            }
        }
        // 添加新设备
        devices.add(device);
        notifyItemInserted(devices.size() - 1);
    }

    /**
     * 清空设备列表
     */
    public void clearDevices() {
        devices.clear();
        notifyDataSetChanged();
    }

    /**
     * 获取设备列表
     * @return 设备列表
     */
    public List<BluetoothDeviceModel> getDevices() {
        return devices;
    }

    /**
     * 设备列表项ViewHolder
     */
    class DeviceViewHolder extends RecyclerView.ViewHolder {
        // 设备名称文本视图
        private final TextView deviceName;
        // 信号强度文本视图
        private final TextView deviceRssi;
        // 连接按钮
        private final MaterialButton connectButton;

        /**
         * 构造函数
         * @param itemView 列表项视图
         */
        public DeviceViewHolder(@NonNull View itemView) {
            super(itemView);
            deviceName = itemView.findViewById(R.id.device_name);
            deviceRssi = itemView.findViewById(R.id.device_rssi);
            connectButton = itemView.findViewById(R.id.btn_connect);
        }

        /**
         * 绑定设备数据到视图
         * @param device 要绑定的设备
         */
        public void bind(BluetoothDeviceModel device) {
            deviceName.setText(device.getName());
            deviceRssi.setText("信号强度: " + device.getRssi() + " dBm");
            connectButton.setText(device.isConnected() ? "断开" : "连接");
            connectButton.setOnClickListener(v -> listener.onConnectClick(device));
        }
    }
} 